home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / shareware / wreckage / source / assembly / backup / asm_rot_b.asm < prev   
Assembly Source File  |  1999-02-08  |  2KB  |  127 lines

  1. ;    a0     &ox
  2. ;    a1    &oy
  3. ;    a2    &oz
  4. ;    a3    &oapp
  5. ;    a4    &sincache
  6. ;    d0    templong
  7. ;    sincache(0)=cvaz*32767
  8. ;    sincache(1)=svaz*32767
  9. ;    sincache(2)=cvax*32767
  10. ;    sincache(3)=svax*32767
  11. ;    sincache(4)=cvay*32767
  12. ;    sincache(5)=svay*32767
  13.  
  14.  
  15. _rot_loop1:
  16.  
  17.     MOVE.b     (a3)+    ,d1    ;oapp
  18.       BEQ     _rot_loop_skip    ;(oapp=0)=> skip point
  19.  
  20.  
  21. ;Main Code :)
  22. ;--------
  23.  
  24.     MOVE.w    (a4)    ,d6    ;get cos
  25.     MOVE.w    2(a4)    ,d7    ;get sin
  26.  
  27.       MOVE.l     (a0)    ,d1    ;d1=ox(n)
  28.      CLR.w     d1
  29.       SWAP     d1
  30.  
  31.       MOVE.w     d1    ,d2    ;d2=x
  32.       MULS.w     d6    ,d1    ;x*csa
  33.  
  34.       MULS.w     d7    ,d2    ;x*sna
  35.  
  36.  
  37.       MOVE.l     (a1)    ,d3    ;oy(n)
  38.       CLR.w     d3
  39.       SWAP     d3
  40.  
  41.       MOVE.w     d3    ,d4    ;y
  42.  
  43.       MULS.w     d7    ,d3    ;y*sna
  44.       SUB.l     d3    ,d1    ;x*csa-y*sna
  45.  
  46.       MULS.w     d6    ,d4    ;y*csa
  47.       ADD.l     d2    ,d4    ;y*csa+x*sna
  48.  
  49.  
  50.  
  51.     ;d4 holds Y
  52.     ;d1 holds X
  53.  
  54.  
  55. _rot_loop2:
  56. ;      yy=y*cvax-z*svax    
  57. ;      zz=z*cvax+y*svax
  58.  
  59.     MOVE.w    4(a4)    ,d6    ;get cos
  60.     MOVE.w    6(a4)    ,d7    ;get sin
  61.  
  62.       MOVE.l     (a2)    ,d5    ;d2=oz(n)
  63.      CLR.w     d5
  64.       SWAP     d5
  65.  
  66.       MOVE.w     d5    ,d2    ;d2=z
  67.  
  68.       MULS.w     d6    ,d5    ;z*csa
  69.       MULS.w     d7    ,d2    ;z*sna
  70.  
  71.     CLR.w    d4
  72.     SWAP    d4
  73.       MOVE.w     d4    ,d3    ;y is still here
  74.                 ;   <grin>
  75.  
  76.       MULS.w     d6    ,d3    ;y*csa
  77.       SUB.l     d2    ,d3    ;yy=y*csa-z*sna
  78.  
  79.       MULS.w     d7    ,d4    ;y*sna
  80.       ADD.l     d5    ,d4    ;zz=z*csa+y*sna
  81.  
  82. ;    X    D1
  83. ;    Z    D4
  84. ;    Y    D3 (do not trash)
  85. ;        -----------------
  86.  
  87. _rot_loop3:
  88. ;      xx=x*cvay-z*svay
  89. ;      zz=z*cvay+x*svay
  90.  
  91.     MOVE.w    8(a4)    ,d6    ;get cos
  92.     MOVE.w    10(a4)    ,d7    ;get sin
  93.  
  94.     CLR.W    d4
  95.     SWAP    d4
  96.       MOVE.w     d4    ,d2    ;d2=z (yes, it is still here)
  97.  
  98.       MULS.w     d6    ,d4    ;z*csa
  99.       MULS.w     d7    ,d2    ;z*sna
  100.  
  101.     CLR.w    d1
  102.     SWAP    d1
  103.  
  104.       MOVE.w     d1    ,d5    ;x is still here                ;   (I hope)
  105.       MULS.w     d6    ,d1    ;x*csa
  106.       SUB.l     d2    ,d1    ;xx=x*csa-z*sna
  107.  
  108.       MULS.w     d7    ,d5    ;x*sna
  109.       ADD.l     d4    ,d5    ;zz=z*csa+x*sna
  110.  
  111. ;    X    D1
  112. ;    Y    D3
  113. ;    Z    D5
  114.  
  115.  
  116.  
  117. _rot_loop_skip:
  118.     MOVE.l    d1    ,(a0)+    ;x()
  119.      MOVE.l    d3    ,(a1)+        ;y()
  120.     MOVE.l    d5    ,(a2)+    ;z()
  121.  
  122.       SUBQ.l    #1    ,d0    ;n=n-1
  123.       BGT     _rot_loop1
  124.  
  125.  
  126.  
  127.